<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // js中bind、call、apply的区别

        // 他们的作用其实是一样的，就是改变一个函数在执行时候的this指向，只是用法不同。

        var name = 'mika';
        var obj = {
            name: 'zzz',
            say(a, b, c) {
                console.log(this.name);
                console.log(a, b, c);
            }
        }

        obj.say(1, 2, 3);//zzz

        // call: n个参数，第一个是你想让this指向谁，后面是你要传递的参数，一个一个写出来就好
        // apply: 两个参数，第一个是你想让this指向谁，第二个是函数接受的参数，要用一个数组包起来
        // bind: 返回的是改变this指向后的方法，并不会自动执行，其余和call相同
        obj.say.call(this, 1, 2, 3);//mika
        obj.say.apply(this, [1, 2, 3]);//mika
        obj.say.bind(this, 1, 2, 3)();//mika


    </script>
</body>

</html>